package main

import (
	"basic-go/src/maps"
	"fmt"
)

/*
 * 该示例是有序的，但不是排序的。
 *
 * 这个实现方法的主要的方法是用空间换取时间。通过list和map两种数据结构，保存相同的一份数据。list用来做顺序遍历，map用来做查找，删除操作。
 *
 * 红黑树的插入、删除、查找的复杂度都是O(logN), 而这个实现插入查找删除的复杂度都是O(1), 可以说是一种非常好的数据结构。
 *
 * https://studygolang.com/articles/11589
 * 实现有序map之go
 *
 */
func main() {
	ml := maps.NewMapList()
	var a, b, c maps.Key
	a = &maps.Elements{Value: "Alice"}
	b = &maps.Elements{Value: "Bob"}
	c = &maps.Elements{Value: "Conrad"}
	ml.Push(a)
	ml.Push(b)
	ml.Push(c)
	cb := func(data maps.Key) {
		fmt.Println(ml.DataMap[data.GetKey()].Value.(*maps.Elements).Value)
	}
	fmt.Println("Print elements in the order of pushing:")
	ml.Walk(cb)
	fmt.Printf("Size of MapList: %d \n", ml.Size())
	ml.Remove(b)
	fmt.Println("After removing b:")
	ml.Walk(cb)
	fmt.Printf("Size of MapList: %d \n", ml.Size())
}
